// Warning : If you need to use this file, include Util_utils_types.h
namespace Util
{
    /// Base type : pair
    /** Not much to say about this one : a typedef could have
    *   been enough, but its not possible in the current C++
    *   version (might be with C++0X).
    */
    template<class T, class N>
    class Pair
    {
    public :

        /// Default constructor.
        Pair()
        {
        }

        /// Constructor.
        /** \param mFirst  The first element of the pair
        *   \param mSecond The second element of the pair
        */
        Pair(const T& mFirst, const N& mSecond)
        {
            mPair_.first = mFirst; mPair_.second = mSecond;
        }

        /// Conversion constructor.
        /** \param mPair The pair to convert
        *   \note Allows full compatiblity with STL.
        */
        Pair(const std::pair<T, N>& mPair) : mPair_(mPair)
        {
        }

        const T& First() const
        {
            return mPair_.first;
        }

        const N& Second() const
        {
            return mPair_.second;
        }

        T& First()
        {
            return mPair_.first;
        }

        N& Second()
        {
            return mPair_.second;
        }

    private :

        std::pair<T, N> mPair_;
    };
}
